其他
双重差分法(DID)安慰剂检验的做法:随机抽取500次?
双重差分法(DID)安慰剂检验的核心思想就是虚构处理组或者虚构政策时间进行估计,如果虚构情况下“伪政策虚拟变量”的系数依然显著,那么就说明原来的估计结果很有可能出现了偏误,我们的被解释变量y
的变动很有可能是受到了其他政策或者随机性因素的影响。
数据来源
原文信息
石大千,丁海,卫平,刘建江.智慧城市建设能否降低环境污染[J].中国工业经济,2018(06):117-135.
随机虚构处理组的Stata操作
sample
命令从中随机抽取32个样本,保留所抽取样本的id
编号,与原数据进行匹配,最终匹配上的就是我们的“伪处理组”样本,未匹配上的就是控制组样本。最终代码
*-安慰剂检验-虚构处理组
mat b = J(500,1,0) //* 系数矩阵
mat se = J(500,1,0) //* 标准误矩阵
mat p = J(500,1,0) //* P值矩阵
*循环500次
forvalues i=1/500{
use smart_city2018.dta, clear
xtset id year //面板数据声明
keep if year==2005 //保留一期数据
sample 32, count //随机抽取32个城市
keep id //得到所抽取样本的id编号
save match_id.dta, replace //另存id编号数据
merge 1:m id using smart_city2018.dta //与原数据匹配
gen treat = (_merge == 3) //将所抽取样本赋值为1,其余为0,得到政策分组虚拟变量
gen period = (year >= 2012) //生成政策时间虚拟变量
gen did = treat*period
reghdfe lnrso did $xlist ,absorb(id year) vce(cluster id)
* 将回归结果赋值到对应矩阵的对应位置
mat b[`i',1] = _b[did]
mat se[`i',1] = _se[did]
* 计算P值并赋值于矩阵
mat p[`i',1] = 2*ttail(e(df_r), abs(_b[did]/_se[did]))
}
* 矩阵转化为向量
svmat b, names(coef)
svmat se, names(se)
svmat p, names(pvalue)
* 删除空值并添加标签
drop if pvalue1 == .
label var pvalue1 p值
label var coef1 估计系数
keep coef1 se1 pvalue1
绘图代码
twoway (kdensity coef1) (scatter pvalue1 coef1, msymbol(smcircle_hollow) mcolor(blue)), ///
title("Placebo Test") ///
xlabel(-0.4(0.1)0.4) ylabel(,angle(0)) ///
xline(-0.171, lwidth(vthin) lp(shortdash)) xtitle("Coefficients") ///
yline(0.1,lwidth(vthin) lp(dash)) ytitle(p value) ///
legend(label(1 "kdensity of estimates") label( 2 "p value")) ///
plotregion(style(none)) ///无边框
graphregion(color(white)) //白底
placebo
”。